package com.study.demo.hutool.aop;

import cn.hutool.aop.ProxyUtil;
import cn.hutool.aop.aspects.TimeIntervalAspect;

public class ProxyUtilDemo {

    public static void main(String[] args) {
        //使用JDK的动态代理实现切面

        //cn.hutool.aop.aspects
        // Animal是被代理类
        Animal cat = ProxyUtil.proxy(new Cat(), TimeIntervalAspect.class);
        cat.eat();
        //在调用proxy方法后，IDE自动补全返回对象为Cat，因为JDK机制的原因，
        // 我们的返回值必须是被代理类实现的接口，因此需要手动将返回值改为Animal，否则会报类型转换失败。

        //使用Cglib实现切面,使用Cglib的好处是无需定义接口即可对对象直接实现切面，使用方式完全一致：
        Dog dog = ProxyUtil.proxy(new Dog(),TimeIntervalAspect.class);
        dog.eat();
    }
}
